package cn.iocoder.yudao.module.promotion.gift.pojo.po;

import cn.iocoder.yudao.framework.business.basic.pojo.po.MerchantScopeEntity;
import cn.iocoder.yudao.framework.mybatis.core.type.LongListTypeHandler;
import cn.iocoder.yudao.module.api.promotion.gift.enums.GiftGiveType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;

import java.time.LocalDateTime;
import java.util.List;

/**
 * <pre>
 * OOoO0OOoO0OOOooo0oOOOO0OOOOO0oooOO0ooOOO0Ooooo0OOOOo0ooooO0OOooo0Ooooo0OOOOO
 *  这里是文件说明
 * OOoO0OOoO0OOOooo0oOOOO0OOOOO0oooOO0ooOOO0Ooooo0OOOOo0ooooO0OOooo0Ooooo0OOOOO
 * </pre>
 *
 * @author 山野羡民（1032694760@qq.com）
 * @since 2025/01/13
 */
@TableName(value = "promotion_gift_activity", autoResultMap = true)
//@KeySequence("promotion_gift_activity_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库，可不写。
@Data
public class GiftActivity extends MerchantScopeEntity {

    /**
     * 合作方店铺编号
     */
    @TableField(typeHandler = LongListTypeHandler.class)
    private List<Long> partnerShopIds;

    /**
     * 赠品形式：0-线下产品、1-线上产品、2-优惠券
     *
     * @see GiftGiveType
     */
    private Integer type;

    @TableField(exist = false)
    private String typeName;

    public String getTypeName() {
        return GiftGiveType.valueOf(getType()).getName();
    }

    /**
     * 名称
     */
    private String name;

    /**
     * 图片
     */
    private String picUrl;

    /**
     * 原价，单位为分，0表示免费
     */
    private Integer originPrice;

    /**
     * 成本价格，单位为分，-1表示不显示价格，0表示免费，用于分账给赠品所属的商家
     */
    private Integer costPrice;

    /**
     * 库存
     */
    private Integer stock;

    /**
     * 限领数量
     */
    private Integer takeLimitCount;

    /**
     * 单位，如：次、条、瓶、份
     */
    private String unit;

    /**
     * 生效时间
     */
    private LocalDateTime startTime;

    /**
     * 是否生效
     */
    @TableField(exist = false)
    private Boolean valid;

    @SuppressWarnings("unused")
    public Boolean getValid() {
        if (getStartTime() == null || Boolean.TRUE.equals(getInvalid())) {
            return false;
        }
        return LocalDateTime.now().isAfter(getStartTime());
    }

    /**
     * 作废时间
     */
    private LocalDateTime endTime;

    /**
     * 是否作废
     */
    @TableField(exist = false)
    private Boolean invalid;

    @SuppressWarnings("unused")
    public Boolean getInvalid() {
        if (getEndTime() == null) {
            return false;
        }
        return LocalDateTime.now().isAfter(getEndTime());
    }

    /**
     * 使用说明
     */
    private String note;

    /**
     * 产品 SPU 编号，赠品形式为线上产品时有效
     */
    private Long spuId;

    /**
     * 产品 SKU 编号，赠品形式为线上产品时有效
     */
    private Long skuId;

    /**
     * 线上优惠券模板编号，赠品形式为线上优惠券时有效
     */
    private Long couponTemplateId;

}
